﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using WLMCoreLibrary;
using MiWebSite_Core;
using System.Text;


namespace MWS_Content
{
    public partial class _Default : System.Web.UI.Page
    {
        WebSiteMainConfiguration config = WebSiteMainConfiguration.GetConfig();
        dbConnector ConexionDB;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request["FormFields"] != null)
                SendContatcEmail();
            else
            {
                if (Request.QueryString["xml"] != null)
                {
                    GetXML();
                }
                else
                    TransformarXML(GeneratePage());
            }
        }

        private MiWebSitePage GeneratePage()
        {
            ConexionDB = new dbConnector(config.Connections[0].value);
            MiWebSitePage pagina= new MiWebSitePage();
            try
            {
                pagina = new MiWebSitePage(ref ConexionDB);
                MiWebSiteContent contenido = new MiWebSiteContent(loadNombreSeccion(), ref ConexionDB);
                contenido.GetAditionalInfo();
                MiWebSiteFunctions.LoadIncludesWebSite(pagina);
                if (contenido.id != 0)
                {
                    pagina.Keywords += "," + contenido.Keywords;
                    pagina.Title = contenido.Titulo + " - " + pagina.Title;
                    if(contenido.Titulo=="")
                        pagina.Title = contenido.ContentName.Split('/')[contenido.ContentName.Split('/').Length-1].Replace("-"," ")+ " - " + pagina.Title;
                    
                    if (contenido.Contenido.Contains("<input") || contenido.Contenido.Contains("<INPUT"))
                    {
                        pagina.StyleSheets.Add("/css/jquery-ui.css");
                        pagina.Scripts.Add("/content/js/content.js");
                        contenido.Contenido = "<FORM id='formularioContacto' action='' method='post'>" + contenido.Contenido;
                        if (!contenido.Contenido.Contains("submit"))
                            contenido.Contenido += "<input type='submit' class='boton' name='submit' value='Enviar Formulario'/><input type='reset' class='boton' value='Limpiar Datos'/>";
                        contenido.Contenido += "</FORM>";
                    }
                }
                else
                {
                    contenido = new MiWebSiteContent();
                    string[] arregloTitulos = loadNombreSeccion().Split('/');
                    contenido.Titulo = arregloTitulos[arregloTitulos.Length - 1].Replace("-", " ");
                    pagina.Title += " - Seccion en Construccion";
                    contenido.ContentName = loadNombreSeccion();
                    if (CurrentUser.NivelUsuario > 2)
                        contenido.Contenido = "De doble Click en el contenido o en el titulo para generar esta seccion!!!";
                    else
                        contenido.Contenido = "Seccion en Construccion, disculpe las molestias";
                }
                if (CurrentUser.IdUsuario != 0)
                {
                    MiWebSiteFunctions.LoadIncludesWebSiteAdmin(pagina);
                    ContentFunctions.LoadIncludesAdmin(pagina);
                }
                pagina.Contenido = WLMFunctions.SerializeObject(contenido).SelectSingleNode("MiWebSiteContent");
            }
            catch (Exception ex)
            {
                if ( HttpContext.Current.IsDebuggingEnabled )
                {
                    // this is executed only in the debug version
                    Response.Write( ex.Message + "<br><br>" + ex.StackTrace );
                    Response.End();
                }
            }
            ConexionDB.CloseConnection();
            return pagina;
        }

        private void TransformarXML(MiWebSitePage pagina)
        {
            List<ParametroTransformacionXML> parametros = new List<ParametroTransformacionXML>();
            parametros.Add(new ParametroTransformacionXML("isMobile", MiWebSiteFunctions.isMobileBrowser().ToString().ToLower()));
            parametros.Add(new ParametroTransformacionXML("skinPath", config.Settings["skinPath"].value));
            string HTMLPagina = WLMFunctions.TransformXML(pagina, config.Settings["siteURL"].value + config.Settings["skinPath"].value + "index.xsl", parametros);
            Response.Write(HTMLPagina);
            Response.End();
        }

        private string loadNombreSeccion()
        {
            if (Request.QueryString["seccion"] != null)
            {
                string seccion = Request.QueryString["seccion"];
                //Response.Write(seccion);
                seccion = seccion.Split(',')[0];
                if (seccion.Length > 1)
                {
                    if (seccion[seccion.Length - 1] == '/')
                        seccion = seccion.Substring(0, seccion.Length - 1);
                    if (seccion[0] != '/')
                        seccion = "/" + seccion;
                }
                return seccion;
            }
            return null;
        }

        private void SendContatcEmail()
        {
            //if (Request["FormFields"] != "")
            //{
            string[] elementos = Request["FormFields"].Split('|');
            StringBuilder campos = new StringBuilder();
            foreach (string cam in elementos)
            {
                campos.Append(cam + ": <b>" + Request[cam] + "</b><br/>");
            }
            wlmwebservices.EmailSender mailer = new wlmwebservices.EmailSender();
            wlmwebservices.EmailRecipient[] recipiente = new wlmwebservices.EmailRecipient[1];
            recipiente[0] = new wlmwebservices.EmailRecipient();
            recipiente[0].Email = config.MailConfig["MailerEmail"].value;
            recipiente[0].Name = config.Settings["siteName"].value;

            //recipiente
            wlmwebservices.WebSiteProfile perfilWebsite = new wlmwebservices.WebSiteProfile();
            perfilWebsite.SMTPPassword = config.MailConfig["MailerPassword"].value;
            perfilWebsite.SMTPPort = "26";
            perfilWebsite.SMTPServer = config.MailConfig["MailerServer"].value;
            perfilWebsite.SMTPUser = config.MailConfig["MailerEmail"].value;
            perfilWebsite.WebSite = config.Settings["siteName"].value;
            perfilWebsite.ContactEmail = new wlmwebservices.EmailRecipient();
            perfilWebsite.ContactEmail.Email = config.MailConfig["MailerEmail"].value;
            Response.Write(mailer.EnviarEmail(recipiente, "Contacto Website", "Envio de Mail desde Website<br><br>" + campos.ToString(), perfilWebsite));
            //TODO refinar la respuesta de email de contenido
            Response.Write("Muchas Gracias por llenar nuestro formulario de contacto, nos comunicaremos cuanto antes con usted.");
            Response.End();
            // }
        }

        private void GetXML()
        {
            Response.Clear();
            Response.ContentType = "text/xml";
            Response.HeaderEncoding = Encoding.UTF8;
            if (Request.QueryString["element"] != null)
            {
                ConexionDB = new dbConnector(config.Connections[0].value);
                MiWebSiteContent contenido = new MiWebSiteContent(loadNombreSeccion(), ref ConexionDB);

                string xmlportada = WLMFunctions.SerializeObject(contenido, true);
                ConexionDB.CloseConnection();
                Response.Write(xmlportada);
            }
            else
            {
                string xmlportada = WLMFunctions.SerializeObject(GeneratePage(), true);
                Response.Write(xmlportada);
            }
            Response.End();
        }
    }
}